'use strict'

module.exports=async (c,next)=>{
    //在每次请求过来之后先进行权限判断
    /* 每次发送请求时，在请求头中加上Authorization属性，将从微信服务器端获取到的加密后的数据赋给该属性
       或者将该加密数据加在请求的参数中，开发者服务器在收到请求后先进行路由的匹配，有匹配项后，先进行下面用户权限的判断
       获取请求中的加密数据，进行解密，解密的结果中有一个ok属性，若该值为true则表示用户拥有权限；若为false则表示用户没有权限 */
    let token = c.headers.authorization || c.query.token  //c.query是url传递的参数，即?后面的参数
    if (!token) {
        return c.status(403).send('TOKEN NULL')
    }

    let r = c.service.tok.verify(token)

    //通过ok属性判断是否成功，失败时errcode属性表示失败的状态码
    if (!r.ok) {
        //errcode的值可能是FAILED TIMEOUT ILLEGAL
        return c.status(403).send(r.errcode)
    }

    //c.box--默认为空对象，可以添加任何属性值，用来动态传递给下一层组件需要使用的信息，避免在c上挂载过多的属性。
    c.box.user = r.data
    console.log('verify end');

    await next()  //调用下一层组件
}